const { request } = require('../../utils/request');
const { showToast } = require('../../utils/util');
const app = getApp();

Page({
  data: {
    id: null,
    receiver: '',
    phone: '',
    region: ['请选择省份', '请选择城市', '请选择区县'],
    customItem: '',
    detail: '',
    isDefault: false,
    loading: false,
    isEdit: false
  },

  onLoad(options) {
    // 设置标题
    wx.setNavigationBarTitle({
      title: options.id ? '编辑收货地址' : '添加收货地址'
    });
    
    if (options.id) {
      this.setData({
        id: options.id,
        isEdit: true
      });
      this.fetchAddressDetail(options.id);
    }
  },

  // 获取地址详情
  fetchAddressDetail(id) {
    const token = wx.getStorageSync('token');
    if (!token) {
      wx.navigateTo({ url: '/pages/my/index' });
      return;
    }

    request({
      url: '/addresses',
      method: 'GET'
    }).then(res => {
      if (res.code === 200) {
        const addressList = res.data || [];
        const address = addressList.find(item => item.id == id);
        
        if (address) {
          this.setData({
            receiver: address.receiver,
            phone: address.phone,
            region: [address.province, address.city, address.district],
            detail: address.detail,
            isDefault: address.is_default == 1
          });
        } else {
          showToast('未找到地址信息');
          setTimeout(() => {
            wx.navigateBack();
          }, 1500);
        }
      } else {
        showToast(res.message || '获取地址信息失败');
      }
    }).catch(err => {
      console.error('获取地址详情失败:', err);
      showToast('网络错误，请稍后重试');
    });
  },

  // 输入框内容变化
  bindReceiverInput(e) {
    this.setData({
      receiver: e.detail.value.trim()
    });
  },

  bindPhoneInput(e) {
    this.setData({
      phone: e.detail.value.trim()
    });
  },

  bindDetailInput(e) {
    this.setData({
      detail: e.detail.value.trim()
    });
  },

  // 地区选择器变化
  bindRegionChange(e) {
    this.setData({
      region: e.detail.value
    });
  },

  // 默认地址开关变化
  bindDefaultChange(e) {
    this.setData({
      isDefault: e.detail.value
    });
  },

  // 保存地址
  saveAddress() {
    if (this.data.loading) return;
    
    // 表单验证
    if (!this.data.receiver.trim()) {
      wx.showToast({
        title: '请输入收货人姓名',
        icon: 'none'
      });
      return;
    }
    
    if (!this.data.phone.trim()) {
      wx.showToast({
        title: '请输入手机号码',
        icon: 'none'
      });
      return;
    }
    
    if (!/^1[3-9]\d{9}$/.test(this.data.phone)) {
      wx.showToast({
        title: '手机号码格式不正确',
        icon: 'none'
      });
      return;
    }
    
    if (this.data.region[0] === '请选择省份') {
      wx.showToast({
        title: '请选择所在地区',
        icon: 'none'
      });
      return;
    }
    
    if (!this.data.detail.trim()) {
      wx.showToast({
        title: '请输入详细地址',
        icon: 'none'
      });
      return;
    }
    
    const token = wx.getStorageSync('token');
    if (!token) {
      wx.navigateTo({ url: '/pages/my/index' });
      return;
    }
    
    this.setData({ loading: true });
    
    const data = {
      receiver: this.data.receiver,
      phone: this.data.phone,
      province: this.data.region[0],
      city: this.data.region[1],
      district: this.data.region[2],
      detail: this.data.detail,
      isDefault: this.data.isDefault
    };
    
    if (this.data.isEdit) {
      this.updateAddress(data);
    } else {
      this.createAddress(data);
    }
  },
  
  // 创建新地址
  createAddress(data) {
    this.setData({ loading: true });
    wx.showLoading({ title: '保存中...' });
    
    request({
      url: '/addresses',
      method: 'POST',
      data: data,
      loading: false // 因为我们已经手动显示loading了
    }).then(res => {
      wx.hideLoading();
      this.setData({ loading: false });
      
      if (res.code === 200) {
        showToast('添加成功');
        // 如果设置为默认地址，需要更新本地缓存
        if (data.isDefault) {
          wx.setStorageSync('selected_address', res.data);
        }
        
        // 延迟一下以便看到成功提示，然后返回上一页
        setTimeout(() => {
          const pages = getCurrentPages();
          // 如果是从别处跳转来的，直接返回上一页
          if (pages.length > 1) {
            wx.navigateBack();
          } else {
            // 如果直接打开的编辑页，跳转到地址管理页
            wx.redirectTo({
              url: '/pages/address/index'
            });
          }
        }, 1000);
      } else {
        showToast(res.message || '添加失败');
      }
    }).catch(err => {
      console.error('添加地址失败:', err);
      wx.hideLoading();
      this.setData({ loading: false });
      showToast('网络错误，请稍后重试');
    });
  },
  
  // 更新地址
  updateAddress(data) {
    this.setData({ loading: true });
    wx.showLoading({ title: '保存中...' });
    
    request({
      url: `/addresses/${this.data.id}`,
      method: 'PUT',
      data: data,
      loading: false // 因为我们已经手动显示loading了
    }).then(res => {
      wx.hideLoading();
      this.setData({ loading: false });
      
      if (res.code === 200) {
        showToast('更新成功');
        // 如果设置为默认地址，需要更新本地缓存
        if (data.isDefault) {
          wx.setStorageSync('selected_address', res.data);
        }
        
        // 延迟一下以便看到成功提示，然后返回上一页
        setTimeout(() => {
          const pages = getCurrentPages();
          // 如果是从别处跳转来的，直接返回上一页
          if (pages.length > 1) {
            wx.navigateBack();
          } else {
            // 如果直接打开的编辑页，跳转到地址管理页
            wx.redirectTo({
              url: '/pages/address/index'
            });
          }
        }, 1000);
      } else {
        showToast(res.message || '更新失败');
      }
    }).catch(err => {
      console.error('更新地址失败:', err);
      wx.hideLoading();
      this.setData({ loading: false });
      showToast('网络错误，请稍后重试');
    });
  }
}); 